/*******************************************************************************
 * 文件名: DateFormat.java
 * 描    述: 日期转换类
 * 创建人: Dean Huang(hudi-112@163.com)
 * 日　期: 2017-12-22
 * 描　述: 文件描述
 * 版　本: 1.0
 *******************************************************************************/

package com.z1.core.format;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateFormat {

	private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	private static final SimpleDateFormat simpleTimeFormat = new SimpleDateFormat("yyyyMMddHHmmss");
	private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
	private static final SimpleDateFormat simpleShortDateFormat = new SimpleDateFormat("yyMMdd");
	private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
	
	/**
	 * 获取当前日期时间
	 * 显示格式：yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static final Date formatNow() {
		String dateString = format.format(new Date());
		return format.parse(dateString, new ParsePosition(8));
	}
	
	/**
	 * 获取当前日期时间串
	 * 显示格式：yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static final String formatNowString() {
		return format.format(new Date());
	}
	
	/**
	 * 获取指定Date日期时间串
	 * 显示格式：yyyy-MM-dd HH:mm:ss
	 * @param date
	 * @return
	 */
	public static final String formatString(Date date) {
		return format.format(date);
	}
	public static final String formatString(Date date, String format) {
		return new SimpleDateFormat(format).format(date);
	}
	
	/**
	 * 获取当前日期串
	 * 显示格式：yyyy-MM-dd
	 * @return
	 */
	public static final String formatNowDateString() {
		return dateFormat.format(new Date());
	}
	
	/**
	 * 获取指定Date日期串
	 * 显示格式：yyyy-MM-dd
	 * @param date
	 * @return
	 */
	public static String formatDateString(Date date) {
		return dateFormat.format(date);
	}
	
	/**
	 * 获取当前时间串
	 * 显示格式：HH:mm:ss
	 * @return
	 */
	public static final String formatNowTimeString() {
		return timeFormat.format(new Date());
	}
	
	/**
	 * 获取指定Date时间串
	 * 显示格式：HH:mm:ss
	 * @param date
	 * @return
	 */
	public static final String formatTimeString(Date date) {
		return timeFormat.format(date);
	}
	
	/**
	 * 获取指定日期时间串的Date对象
	 * 格式：yyyy-MM-dd HH:mm:ss
	 * @param str
	 * @return
	 */
	public static final Date parser(String str) {
		try {
			return format.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 获取指定毫秒的Date对象
	 * 格式：yyyy-MM-dd HH:mm:ss
	 * @param time
	 * @return
	 */
	public static final Date formatDate(long time) {
		String dateString = format.format(new Date(time));
		return format.parse(dateString, new ParsePosition(8));
	}
	
	/**
	 * 获取指定毫秒的日期时间串
	 * 格式：yyyy-MM-dd HH:mm:ss
	 * @param time
	 * @return
	 */
	public static final String formatString(long time) {
		return format.format(new Date(time));
	}
	
	/**
	 * 转换时间格式
	 * 输入格式:yyyyMMddHHmmss
	 * 输出格式:yyyy-MM-dd HH:mm:ss
	 * @param time
	 * @return
	 */
	public static final Date formatSimpleTimeString(String time) {
		try {
			return simpleTimeFormat.parse(time);
		}
		catch (ParseException e) {
			System.out.println("time format error!");
		}
		return null;
	}
	public static final String formatSimpleTime(String time) {
		if (null != time && time.length() == 14) {
			try {
				Long.parseLong(time);
				return time.substring(0, 4) + "-" 
					+ time.substring(4, 6) + "-" 
					+ time.substring(6, 8) + " " 
					+ time.substring(8, 10) + ":" 
					+ time.substring(10, 12) + ":"
					+ time.substring(12);
			}
			catch (Exception e) {
				e.printStackTrace();
				System.out.println("time format error!");
			}
		}
		return null;
	}
	
	/**
	 * 转换时间格式
	 * 显示格式:yyyyMMddHHmmss
	 * @param time
	 * @return
	 */
	public static final String formatSimpleTimeString(Date date) {
		return simpleTimeFormat.format(date);
	}
	public static final String formatNowSimpleTimeString() {
		return simpleTimeFormat.format(new Date());
	}
	
	/**
	 * 格式yymmdd
	 * @return
	 */
	public static final String formatSimpleShortDateString(){
		return simpleShortDateFormat.format(new Date());
	}
	
	/**
	 * 转换时间格式
	 * 显示格式:yyyyMMdd
	 * @param time
	 * @return
	 */
	public static final String formatSimpleDateString(Date date) {
		return simpleDateFormat.format(date);
	}
	public static final String formatNowSimpleDateString() {
		return simpleDateFormat.format(new Date());
	}
	
	public static final String formatDateStringByStyle(Date date, String style) {
		return new SimpleDateFormat(style).format(date);
	}
	
	/**
	 * return 毫秒
	 * @param datetime "2016-12-31 12:30:45"
	 * @throws ParseException
	 */
	public static long datetime2MSeconds(String datetime) {
	    Calendar calendar = Calendar.getInstance();
	    try {
			calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(datetime));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	    return calendar.getTimeInMillis();
	}
	
	public static void main(String[] args) throws ParseException {
		System.out.println(formatString(new Date(datetime2MSeconds("2016-12-31 12:30:45")+1000), "yyyy-MM-dd HH:mm:ss"));
	}

	
}
